Plotting Using Layers

Haley Jeppson, Joe Papio,
Sam Tyner

June 13, 2017

Deepwater Horizon Oil Spill

Datasets

NOAA Data:

  • National Oceanic and Atmospheric Administration
  • Temperature and Salinity Data in Gulf of Mexico
  • Measured using Floats, Gliders and Boats

US Fisheries and Wildlife Data:

  • Animal Sightings on the Gulf Coast
  • Birds, Turtles and Mammals
  • Status: Oil Covered or Not

Both data sets have geographic coordinates for ever observation

Loading NOAA Data

NOAA data is a .rdata file so we need to read it specially:

  1. Download the data from http://heike.github.io/rwrks/02-r-graphics/data/noaa.rdata
  2. Run the getwd() command to find your current working directory
  3. Place noaa.rdata in the directory from step 2.
  4. Run the command below:
load("noaa.rdata")

Floats

Lets take a peek at the top of the floats NOAA data.

glimpse(floats)
## Observations: 10,332
## Variables: 14
## $ callSign       <fctr> Q4901043, Q4901043, Q4901043, Q4901043, Q49010...
## $ Date_Time      <fctr> 7/12/2010, 7/12/2010, 7/12/2010, 7/12/2010, 7/...
## $ JulianDay      <dbl> 2455390, 2455390, 2455390, 2455390, 2455390, 24...
## $ Time_QC        <int> 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,...
## $ Latitude       <dbl> 24.823, 24.823, 24.823, 24.823, 24.823, 24.823,...
## $ Longitude      <dbl> -87.964, -87.964, -87.964, -87.964, -87.964, -8...
## $ Position_QC    <int> 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,...
## $ Depth          <int> 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26,...
## $ Depth_QC       <int> 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,...
## $ Temperature    <dbl> 29.83, 29.65, 29.53, 29.49, 29.46, 29.44, 29.41...
## $ Temperature_QC <int> 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,...
## $ Salinity       <dbl> 36.59, 36.58, 36.58, 36.58, 36.58, 36.58, 36.57...
## $ Salinity_QC    <int> 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,...
## $ Type           <fctr> Float, Float, Float, Float, Float, Float, Floa...

Floats Plot

qplot(Longitude, Latitude, colour = callSign, data = floats) + 
    coord_map()

Gliders

qplot(Longitude, Latitude, colour = callSign, data = gliders) + 
    coord_map()

Boats

qplot(Longitude, Latitude, colour = callSign, data = boats) + 
    coord_map()

Layering

This data has the same context - a common time and common place

  • Want to aggregate information from different sources onto a common plot
  • Start with a common background the lat/long grid
  • With ggplot2 we will superimpose data onto this grid in layers

Layers

To give you an idea…

ggplot() +
    geom_sf(data = states) + 
    geom_point(data = floats, aes(x = Longitude, y = Latitude, colour = callSign)) +   
    geom_point(aes(x, y), shape = "x", size = 5, data = rig) + 
    geom_text(aes(x, y), label = "BP Oil Rig", 
              size = 5, data = rig, hjust = -0.1) + 
    xlim(c(-91, -80)) + ylim(c(22,32))

More Layering

  • Most maps (and many plots) have multiple layers of data. The layers may be from the same or different datasets.
  • ggplot2 builds around this same idea. Very easy to add additional layers to the plot. To do this we need to understand a little more about the underlying theory…

What is a Plot?

  • A default dataset
  • A coordinate system
  • layers of geometric objects (geoms)
  • A set of aesthetic mappings (taking information from the data and converting into an attribute of the plot)
  • A scale for each aesthetic
  • A facetting specification (multiple plots based on subsetting the data)

Floats Decomposed

  • Data: floats
  • Mappings:
aesthetic mapping
x Longitude
y Latitude
color CallSign
  • Layers: Points
  • Scales:
aesthetic scale
x continuous
y continuous
color discrete

Facetting: None

qplot() vs ggplot()

qplot() stands for “quickplot”:

  • Automatically chooses default settings to make life easier
  • Less control over plot construction

ggplot() stands for “grammar of graphics plot”

  • Contructs the plot using components listed in previous slides

qplot() and ggplot() for Floats

Two ways to construct the same plot for float locations:

qplot(Longitude, Latitude, colour = callSign, data = floats) 

Or:

ggplot(data = floats, 
       aes(x = Longitude, y = Latitude, colour = callSign)) +
  geom_point() + 
  scale_x_continuous() + 
  scale_y_continuous() + 
  scale_colour_discrete()

We can shorten that a bit

We fortunately don’t need to be so verbose - Even ggplot() will automatically pick default scales:

ggplot(data = floats, 
       aes(x = Longitude, y = Latitude, colour = callSign)) +
  geom_point()

Your Turn

Find the ggplot() statement that creates this plot:

What is a Layer?

A layer added ggplot() can be a geom…

  • The type of geometric object
  • The statistic mapped to that object
  • The data set from which to obtain the statistic

… or a position adjustment to the scales

  • Changing the axes scale
  • Changing the color gradient

Layer Examples

Plot Geom Stat
Scatterplot point identity
Histogram bar bin count
Smoother line + ribbon smoother function
Binned Scatterplot rectange + color 2d bin count

More geoms described at http://docs.ggplot2.org/current/

Piecing Things Together

Want to build a map using NOAA data

  • Coordinate system (mapping Long-Lat to X-Y)
  • Add layer of state outlines
  • Add layer of points for float locations
  • Add layers for Oil Rig marker and label
  • Adjust the range of x and y scales

The Result

ggplot() +
    geom_sf(data = states) + 
    geom_point(data = floats, aes(x = Longitude, y = Latitude, colour = callSign)) +   
    geom_point(aes(x, y), shape = "x", size = 5, data = rig) + 
    geom_text(aes(x, y), label = "BP Oil Rig", size = 5, data = rig, hjust = -0.1) + 
    xlim(c(-91, -80)) + 
    ylim(c(22, 32))

Your Turn

  1. Read in the animal.csv data:
animal <- read.csv("http://heike.github.io/rwrks/02-r-graphics/data/animal.csv", stringsAsFactors = FALSE)
  1. Plot the location of animal sightings on a map of the region
  2. On this plot, try to color points by class of animal and/or status of animal
  3. Advanced: Could we indicate time somehow?